home *** CD-ROM | disk | FTP | other *** search
/ Software of the Month Club 2000 October / Software of the Month - Ultimate Collection Shareware 277.iso / pc / PROGRAMS / UTILITY / WINLINUX / DATA1.CAB / dev_-_Device_Nodes / MAKEDEV.{__ < prev    next >
Text File  |  1999-09-17  |  16KB  |  645 lines

  1. #! /bin/sh -
  2.  
  3. RCSID='$Id: MAKEDEV 2.3 1997/09/29 19:03:13 johnsonm Exp $'
  4.  
  5. #---#---#---#---#---#---#---#---#---#---#---#---#---#---#---#---#---#---#---#
  6. # Customisation:
  7. #   The devices fall into various classes.  This section contains the mapping
  8. # from a class name into a group name and permission.
  9. #   You will almost certainly need to edit the group name to match your
  10. # system, and you may change the permissions to suit your preference.  These
  11. # lines _must_ be of the format "user group perm".
  12.  
  13.  public="  root sys    666"
  14.  system="  root sys    660"
  15.    kmem="  root kmem   660"
  16.     tty="  root tty    666"
  17.    cons="  root tty    622"    # 622 for console?
  18.     vcs="  root sys    600"
  19. dialout="  root uucp   660"
  20.   mouse="  root sys    666"
  21. printer="  root daemon 660"
  22.  floppy="  root floppy 660"
  23.    disk="  root disk   660"
  24.    scsi="  root sys    600"
  25.   cdrom="  root disk   660"
  26.    tape="  root disk   660"
  27.   audio="  root sys    666"
  28.   ibcs2="  root sys    666"
  29. scanner="  root sys    666"
  30.  
  31. MAXVT=8
  32.  
  33. #---#---#---#---#---#---#---#---#---#---#---#---#---#---#---#---#---#---#---#
  34.  
  35. procfs=/proc
  36.  
  37. opt_v=
  38. opt_d=
  39. opt_n=
  40.  
  41. while [ $# -ge 1 ]
  42. do
  43.     case $1 in
  44.         --)    shift; break ;;
  45.         -v)    shift; opt_v=1 ;;
  46.         -d)    shift; opt_d=1 ;;
  47.         -n)    shift; opt_n=1; opt_v=1 ;;
  48.         -V)    shift; opt_V=1 ;;
  49.         -*)    echo "$0: unknown flag \"$1\"" >&2; exit 1 ;;
  50.         *)    break ;;
  51.     esac
  52. done
  53.  
  54. if [ "$opt_V" ]
  55. then
  56.     echo "$RCSID"
  57.     exit 0
  58. fi
  59.  
  60. opts="${opt_n:+-n} ${opt_v:+-v} ${opt_d:+-d}"
  61.  
  62. #---#---#---#---#---#---#---#---#---#---#---#---#---#---#---#---#---#---#---#
  63.  
  64. makedev () {    # usage: makedev name [bcu] major minor owner group mode
  65.     if [ "$opt_v" ]
  66.     then    if [ "$opt_d" ]
  67.         then    echo "delete $1"
  68.         else    echo "create $1    $2 $3 $4 $5:$6 $7" 
  69.         fi
  70.     fi
  71.     if [ ! "$opt_n" ]
  72.     then    if [ "$opt_d" ]
  73.         then
  74.             rm -f $1
  75.         else
  76.             rm -f $1-
  77.             mknod $1- $2 $3 $4 &&
  78.             chown $5:$6 $1- &&
  79.             chmod $7 $1- &&
  80.             mv $1- $1
  81.         fi
  82.     fi
  83. }
  84. symlink () {    # usage: symlink name target
  85.     if [ "$opt_v" ]
  86.     then    if [ "$opt_d" ]
  87.         then    echo "delete $1"
  88.         else    echo "create $1    -> $2"
  89.         fi
  90.     fi
  91.     [ ! "$opt_n" ] && rm -f $1 &&
  92.     [ ! "$opt_d" ] && ln -s $2 $1
  93. }
  94.  
  95. #---#---#---#---#---#---#---#---#---#---#---#---#---#---#---#---#---#---#---#
  96.  
  97. # For bash and ksh, we can use faster builtin routines to do manipulation,
  98. # otherwise (ash) fall back to slower method using `expr'.
  99. # The extra level of indirection using `eval' is necessary a) for ksh, and
  100. # b) to get past ash.
  101.  
  102. if [ "$RANDOM" != "$RANDOM" ]
  103. then
  104.     math () {
  105.         eval echo "\$(($*))"
  106.     }
  107.     index () {    # index string c
  108.         eval "I=\${1%$2*}"
  109.         eval echo "\${#I}"
  110.     }
  111.     suffix () {
  112.         eval echo "\${1#$2}"
  113.     }
  114.     strip () {
  115.         eval echo "\${1% $2 *} \${1#* $2 }"
  116.     }
  117. else
  118.     math () {
  119.         expr "$@"
  120.     }
  121.     index () {    # index string c
  122.         expr $1 : ".*$2" - 1
  123.     }
  124.     suffix () {
  125.         expr "$1" : "$2\(.*\)"
  126.     }
  127.     strip () {
  128.         echo "[$1][$2]" >&2
  129.         echo "`expr \"$1\" : \"\(.*\) $2 \"` `expr \"$1\" : \".* $2 \(.*\)\"`"
  130.     }
  131. fi
  132.  
  133. #---#---#---#---#---#---#---#---#---#---#---#---#---#---#---#---#---#---#---#
  134.  
  135. devices=
  136. if [ ! -f $procfs/devices ]
  137. then
  138.     echo "$0: warning: can't read $procfs/devices" >&2
  139. else
  140.     exec 3<$procfs/devices
  141.     while read major device <&3
  142.     do
  143.         case "$major" in
  144.             Character|Block|'')
  145.                 ;;
  146.             *)
  147.                 eval "major_$device=$major"
  148.                 devices="$devices $device"
  149.                 ;;
  150.         esac
  151.     done
  152.     exec 3<&-
  153. fi
  154.  
  155. Major () {
  156.     device=$2
  157.     if [ "$opt_d" ]
  158.     then
  159.         echo -1    # don't care
  160.     else
  161.         eval echo \${major_$1:-\${device:?\"unknown major number for $1\"}}
  162.     fi
  163. }
  164.  
  165. cvt () {
  166.     while [ $# -ne 0 ]
  167.     do
  168.         case "$1" in
  169.             mem|tty|ttyp|cua|cub)    ;;
  170.             hd)    (for d in a b c d e f g h ; do
  171.                     echo -n hd$d " "
  172.                  done) ; echo
  173.                 ;;
  174.             ide0)    echo hda hdb ;;
  175.             ide1)    echo hdc hdd ;;
  176.             ide2)    echo hde hdf ;;
  177.             ide3)    echo hdg hdh ;;
  178.             sd)    echo sda sdb ;;
  179.             sr)    echo scd0 ;;
  180.             st)    echo st0 ;;
  181.             xd)    echo xda xdb ;;
  182.             fd)    echo fd0 fd1 ;;
  183.             lp)    echo lp ;;
  184.             mt)    echo ftape ;;
  185.             loop)    echo loop ;;
  186.             md)    echo md ;;
  187.             ibcs2)    echo ibcs2 ;;
  188.             tpqic02)    echo qic ;;
  189.             sound)        echo audio ;;
  190.             logiscan)    echo logiscan ;;
  191.             ac4096)        echo ac4096 ;;
  192.             hw)    echo helloworld ;;
  193.             sbpcd | sbpcd[123])    echo $1 ;;
  194.             Joystick)    echo js ;;
  195.             apm_bios)    echo apm ;;
  196.             dcf)        echo dcf ;;
  197.             aztcd)        echo aztcd ;;
  198.             pcmcia)    ;; # taken care of by its own driver
  199.             ttyC)    echo cyclades ;;
  200.             vcs)    ;;
  201.             *)    echo "$0: don't know what \"$1\" is" >&2 ;;
  202.         esac
  203.         shift
  204.     done
  205. }
  206.  
  207. for arg
  208. do
  209.     case $arg in
  210.     generic)
  211.         $0 $opts std
  212.         $0 $opts fd
  213.         $0 $opts fd0 fd1
  214.         $0 $opts hda hdb
  215.         $0 $opts xda xdb
  216.         $0 $opts sda sdb
  217.         $0 $opts pty
  218.         $0 $opts console
  219.         $0 $opts ttyS0 ttyS1 ttyS2 ttyS3
  220.         $0 $opts busmice
  221.         $0 $opts lp
  222.         $0 $opts par
  223.         ;;
  224.     local)
  225.         $0.local $opts
  226.         ;;
  227.     std)
  228.         makedev mem  c 1 1 $kmem
  229.         makedev kmem c 1 2 $kmem
  230.         makedev null c 1 3 $public
  231.         makedev port c 1 4 $kmem
  232.         makedev zero c 1 5 $public
  233.         symlink core $procfs/kcore
  234.         makedev full c 1 7 $public
  235.         $0 ram
  236.         makedev tty  c 5 0 $tty
  237.         ;;
  238.     ram)
  239.         for i in 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 ; do
  240.             makedev ram$i  b 1 $i $disk
  241.         done
  242.         ln -sf ram1 ram
  243.         ;;
  244.     console)
  245.         major=`Major vcs`    # not fatal
  246.         # console
  247.         makedev tty0 c 4 0 $cons
  248.         symlink console tty0
  249.         [ "$major" ] && makedev vcs0 c $major 0 $vcs
  250.         [ "$major" ] && makedev vcsa c $major 128 $vcs
  251.         # individual vts
  252.         line=1
  253.         while [ $line -le $MAXVT -a $line -le 63 ]
  254.         do
  255.             makedev tty$line c 4 $line $tty
  256.             [ "$major" ] && makedev vcs$line c $major $line $vcs
  257.             [ "$major" ] && makedev vcsa$line c $major `math $line + 128` $vcs
  258.             line=`math $line + 1`
  259.         done
  260.         ;;
  261.     tty[1-9]|tty[1-5][0-9]|tty[6][0-3])
  262.         line=`suffix $arg tty`
  263.         makedev tty$line c 4 $line $tty
  264.         ;;
  265.     ttyS[0-9]|ttyS[1-5][0-9]|ttyS[6][0-3])
  266.         line=`suffix $arg ttyS`
  267.         minor=`math 64 + $line`
  268.         makedev ttyS$line c 4 $minor $tty
  269.         makedev cua$line c 5 $minor $dialout
  270.         ;;
  271.     pty[a-ep-z])
  272.         bank=`suffix $arg pty`
  273.         base=`index pqrstuvwxyzabcde $bank`
  274.         base=`math $base \* 16`
  275.         for i in 0 1 2 3 4 5 6 7 8 9 a b c d e f
  276.         do
  277.             j=`index 0123456789abcdef $i`
  278.             makedev pty$bank$i c 2 `math $base + $j` $tty
  279.             makedev tty$bank$i c 3 `math $base + $j` $tty
  280.         done
  281.         ;;
  282.     pty)
  283.         ptysufs=""
  284.         for i in p q r s t u v w x y z a b c d e
  285.         do
  286.             ptysufs="$ptysufs pty$i"
  287.         done
  288.         $0 $opts $ptysufs
  289.         ;;
  290.     cyclades)
  291.         major1=`Major ttyC` || continue
  292.         major2=`Major cub` || continue
  293.         for i in 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 \
  294.                          16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32
  295.         do
  296.             makedev ttyC$i c $major1 $i $tty
  297.             makedev cub$i c $major2 $i $dialout
  298.         done
  299.         ;;
  300.     lp)
  301.         major=`Major lp` || continue
  302.         makedev ${arg}0 c $major 0 $printer
  303.         makedev ${arg}1 c $major 1 $printer
  304.         makedev ${arg}2 c $major 2 $printer
  305.         ;;
  306.     par)
  307.         major=`Major lp` || continue
  308.         makedev ${arg}0 c $major 0 $printer
  309.         makedev ${arg}1 c $major 1 $printer
  310.         makedev ${arg}2 c $major 2 $printer
  311.         ;;
  312.     busmice)
  313.         major=`Major mouse 10` || continue
  314.         makedev logimouse c $major 0 $mouse
  315.         makedev psmouse   c $major 1 $mouse
  316.         makedev msmouse   c $major 2 $mouse
  317.         makedev atimouse  c $major 3 $mouse
  318.         makedev jmouse    c $major 4 $mouse
  319.         ;;
  320.     js)
  321.         major=`Major Joystick` || continue
  322.         makedev js0 c $major 0 $mouse
  323.         makedev js1 c $major 1 $mouse
  324.         ;;
  325.     fd[0-7])
  326.         major=`Major fd 2` || continue
  327.         base=`suffix $arg fd`
  328.         if [ $base -ge 4 ]
  329.         then
  330.             base=`math $base + 124`
  331.         fi
  332.         makedev ${arg} b $major $base $floppy
  333.         makedev ${arg}d360  b $major `math $base +  4` $floppy
  334.         makedev ${arg}h1200 b $major `math $base +  8` $floppy
  335.         makedev ${arg}D360  b $major `math $base + 12` $floppy
  336.         makedev ${arg}D720  b $major `math $base + 16` $floppy
  337.         makedev ${arg}h360  b $major `math $base + 20` $floppy
  338.         makedev ${arg}h720  b $major `math $base + 24` $floppy
  339.         makedev ${arg}H1440 b $major `math $base + 28` $floppy
  340.         makedev ${arg}E2880 b $major `math $base + 32` $floppy
  341.         makedev ${arg}CompaQ b $major `math $base + 36` $floppy
  342.  
  343.         symlink ${arg}H360 ${arg}D360
  344.         symlink ${arg}H720 ${arg}D720
  345.  
  346.         makedev ${arg}h1440 b $major `math $base + 40` $floppy
  347.         makedev ${arg}H1680 b $major `math $base + 44` $floppy
  348.         makedev ${arg}h410  b $major `math $base + 48` $floppy
  349.         makedev ${arg}H820  b $major `math $base + 52` $floppy
  350.         makedev ${arg}h1476 b $major `math $base + 56` $floppy
  351.         makedev ${arg}H1722 b $major `math $base + 60` $floppy
  352.         makedev ${arg}h420  b $major `math $base + 64` $floppy
  353.         makedev ${arg}H830  b $major `math $base + 68` $floppy
  354.         makedev ${arg}h1494 b $major `math $base + 72` $floppy
  355.         makedev ${arg}H1743 b $major `math $base + 76` $floppy
  356.         makedev ${arg}h880  b $major `math $base + 80` $floppy
  357.         makedev ${arg}D1040 b $major `math $base + 84` $floppy
  358.         makedev ${arg}D1120 b $major `math $base + 88` $floppy
  359.         makedev ${arg}h1600 b $major `math $base + 92` $floppy
  360.         makedev ${arg}H1760 b $major `math $base + 96` $floppy
  361.         makedev ${arg}H1920 b $major `math $base + 100` $floppy
  362.         makedev ${arg}E3200 b $major `math $base + 104` $floppy
  363.         makedev ${arg}E3520 b $major `math $base + 108` $floppy
  364.         makedev ${arg}E3840 b $major `math $base + 112` $floppy
  365.         makedev ${arg}H1840 b $major `math $base + 116` $floppy
  366.         makedev ${arg}D800  b $major `math $base + 120` $floppy
  367.         makedev ${arg}H1600 b $major `math $base + 124` $floppy
  368.         ;;
  369.     hd[a-b])
  370.         major=`Major ide0` || major=`Major hd 3` || continue
  371.         unit=`suffix $arg hd`
  372.         base=`index ab $unit`
  373.         base=`math $base \* 64`
  374.         makedev hd$unit b $major $base $disk
  375.         for part in 1 2 3 4 5 6 7 8 # 9 10 11 12 13 14 15 16 17 18 19 20
  376.         do
  377.             makedev hd$unit$part b $major `math $base + $part` $disk
  378.         done
  379.         ;;
  380.     hd[c-d])
  381.         major=`Major ide1 22` || continue
  382.         unit=`suffix $arg hd`
  383.         base=`index cd $unit`
  384.         base=`math $base \* 64`
  385.         makedev hd$unit b $major $base $disk
  386.         for part in 1 2 3 4 5 6 7 8 # 9 10 11 12 13 14 15 16 17 18 19 20
  387.         do
  388.             makedev hd$unit$part b $major `expr $base + $part` $disk
  389.         done
  390.         ;;
  391.     hd[e-f])
  392.         major=`Major ide2 33` || continue
  393.         unit=`suffix $arg hd`
  394.         base=`index ef $unit`
  395.         base=`math $base \* 64`
  396.         makedev hd$unit b $major $base $disk
  397.         for part in 1 2 3 4 5 6 7 8 # 9 10 11 12 13 14 15 16 17 18 19 20
  398.         do
  399.             makedev hd$unit$part b $major `expr $base + $part` $disk
  400.         done
  401.         ;;
  402.     hd[g-h])
  403.         major=`Major ide3 34` || continue
  404.         unit=`suffix $arg hd`
  405.         base=`index gh $unit`
  406.         base=`math $base \* 64`
  407.         makedev hd$unit b $major $base $disk
  408.         for part in 1 2 3 4 5 6 7 8 # 9 10 11 12 13 14 15 16 17 18 19 20
  409.         do
  410.             makedev hd$unit$part b $major `expr $base + $part` $disk
  411.         done
  412.         ;;
  413.     ht)
  414.         major=`Major ht0 37` || continue
  415.         # Only one IDE tape drive is currently supported; ht0.
  416.         makedev ht0 c $major 0 $tape
  417.         makedev ht0 c $major 0 $tape
  418.         makedev nht0 c $major 128 $tape
  419.         ;;
  420.     xd[a-d])
  421.         major=`Major xd 13` || continue
  422.         unit=`suffix $arg xd`
  423.         base=`index abcd $unit`
  424.         base=`math $base \* 64`
  425.         makedev xd$unit b $major $base $disk
  426.         for part in 1 2 3 4 5 6 7 8 # 9 10 11 12 13 14 15 16 17 18 19 20
  427.         do
  428.             makedev xd$unit$part b $major `expr $base + $part` $disk
  429.         done
  430.         ;;
  431.     sd[a-h])
  432.         major=`Major sd 8` || continue
  433.         unit=`suffix $arg sd`
  434.         base=`index abcdefgh $unit`
  435.         base=`math $base \* 16`
  436.         makedev sd$unit b $major $base $disk
  437.         for part in 1 2 3 4 5 6 7 8 # 9 10 11 12 13 14 15
  438.         do
  439.             minor=`expr $base + $part`
  440.             makedev sd$unit$part b $major $minor $disk
  441.         done
  442.         ;;
  443.     loop)
  444.         major=`Major loop` || continue
  445.         for part in 0 1 2 3 4 5 6 7
  446.         do
  447.             makedev loop$part b $major $part $disk
  448.         done
  449.         ;;
  450.     md)
  451.         major=`Major md` || continue
  452.         for part in 0 1 2 3
  453.         do
  454.             makedev md$part b $major $part $disk
  455.         done
  456.         ;;
  457.     st[0-7])
  458.         major=`Major st 9`
  459.         unit=`suffix $arg st`
  460.         makedev st$unit c $major $unit $tape
  461.         makedev nst$unit c $major `math 128 + $unit` $tape
  462.         ;;
  463.     qic)
  464.         major=`Major tpqic02 12`
  465.         makedev rmt8       c $major   6 $tape
  466.         makedev rmt16      c $major   8 $tape
  467.         makedev tape-d     c $major 136 $tape
  468.         makedev tape-reset c $major 255 $tape
  469.         ;;
  470.     ftape)
  471.         major=`Major mt 27` || continue
  472.         for unit in 0 1 2 3
  473.         do
  474.             makedev rft$unit c $major $unit $tape
  475.             makedev nrft$unit c $major `math $unit + 4` $tape
  476.         done
  477.         symlink ftape rft0
  478.         symlink nftape nrft0
  479.         ;;
  480.     scd[0-7])
  481.         major=`Major sr 11` || continue
  482.         unit=`suffix $arg scd`
  483.         makedev scd$unit b $major $unit $cdrom
  484.         ;;
  485.     sonycd)
  486.         major=`Major cdu31a` || continue
  487.         makedev $arg b $major 0 $cdrom
  488.         ;;
  489.     mcd)
  490.         major=`Major mcd 23` || continue
  491.         makedev $arg b $major 0 $cdrom
  492.         ;;
  493.     mcdx)
  494.         major=`Major mcdx 20` || continue
  495.         makedev $arg b $major 0 $cdrom
  496.         ;;
  497.     cdu535)
  498.         makedev $arg b 24 0 $cdrom
  499.         ;;
  500.     lmscd)
  501.         makedev $arg b 24 0 $cdrom
  502.         ;;
  503.     sbpcd|sbpcd[123])
  504.         major=`Major $arg` || continue
  505.         base=`suffix ${arg}0 sbpcd`
  506.         # base=`expr ${arg}0 : "sbpcd\(.\)"`
  507.         for minor in 0 1 2 3
  508.         do
  509.             # XXX
  510.             unit=`expr substr 0123456789abcdef \( $base \* 4 + $minor + 1 \) 1`
  511.             makedev sbpcd$unit b $major $minor $cdrom
  512.         done
  513.         [ $arg = sbpcd ] && symlink $arg ${arg}0
  514.         ;;
  515.     aztcd)
  516.         major=`Major $arg` || continue
  517.         makedev ${arg}0 b $major 0 $cdrom
  518.         ;;
  519.     bpcd)
  520.         makedev $arg b 41 0 $cdrom
  521.         ;;
  522.     logiscan)
  523.         major=`Major logiscan` || continue
  524.         makedev $arg c $major 0 $scanner
  525.         ;;
  526.     m105scan)
  527.         major=`Major m105` || continue
  528.         makedev $arg c $major 0 $scanner
  529.         ;;
  530.     ac4096)
  531.         major=`Major ac4096` || continue
  532.         makedev $arg c $major 0 $scanner
  533.         ;;
  534.     audio)
  535.         major=`Major sound 14`
  536.         makedev mixer      c $major  0 $audio
  537.         makedev sequencer  c $major  1 $audio
  538.         makedev midi00     c $major  2 $audio
  539.         makedev dsp        c $major  3 $audio
  540.         makedev audio      c $major  4 $audio
  541.         makedev sndstat    c $major  6 $audio
  542. #        makedev sequencer2 c $major  8 $audio
  543.         makedev mixer1     c $major 16 $audio
  544. #        makedev patmgr0    c $major 17 $audio
  545.         makedev midi01     c $major 18 $audio
  546.         makedev dsp1       c $major 19 $audio
  547.         makedev audio1     c $major 20 $audio
  548. #        makedev patmgr1    c $major 33 $audio
  549.         makedev midi02     c $major 34 $audio
  550.         makedev midi03     c $major 50 $audio
  551.         ;;
  552.     pcaudio)
  553.         major=`Major pcsp` || continue
  554.         makedev pcmixer c $major 0 $audio
  555.         makedev pcsp    c $major 3 $audio
  556.         makedev pcaudio c $major 4 $audio
  557.         ;;
  558.     sg)
  559.         major=`Major sg 21`
  560.         for unit in a b c d e f g h
  561.         do
  562.             minor=`index abcdefgh $unit`
  563.             # minor=`expr abcdefgh : ".*$unit" - 1`
  564.             makedev $arg$unit c $major $minor $scsi
  565.         done
  566.         ;;
  567.     fd)
  568.         # not really devices, we use the /proc filesystem
  569.         symlink fd     $procfs/self/fd
  570.         symlink stdin  fd/0
  571.         symlink stdout fd/1
  572.         symlink stderr fd/2
  573.         ;;
  574.     ibcs2)
  575.         major=`Major ibcs2` || continue
  576.         makedev socksys c $major 0 $ibcs2
  577.         symlink nfsd socksys
  578.         makedev spx     c $major 1 $ibcs2
  579.         symlink X0R null
  580.         ;;
  581.     apm)
  582.         major=`Major apm_bios` || continue
  583.         makedev $arg c $major 0 $system
  584.         ;;
  585.     dcf)
  586.         major=`Major dcf` || continue
  587.         makedev $arg c $major 0 $system
  588.         ;;
  589.     helloworld)
  590.         major=`Major hw` || continue
  591.         makedev helloworld c $major 0 $public
  592.         ;;
  593.     update)
  594.         if [ ! "$devices" ]
  595.         then
  596.             echo "$0: don't appear to have any devices" >&2
  597.             continue
  598.         fi
  599.         if [ "$opt_d" ]
  600.         then
  601.             echo "$0: can't delete an update" >&2
  602.             continue
  603.         fi
  604.         create=
  605.         delete=
  606.         devs="$devices"
  607.         if [ -f DEVICES ]
  608.         then
  609.             exec 3<DEVICES
  610.             while read device major <&3
  611.             do
  612.                 eval now=\$major_$device
  613.                 if [ "$now" = "" ]
  614.                 then
  615.                     delete="$delete `cvt $device`"
  616.                     continue
  617.                 elif [ "$now" != $major ]
  618.                 then
  619.                     create="$create "`cvt $device`
  620.                 fi
  621.                 devs=`strip " $devs " $device`
  622.                 # devs=`expr "$devs" : "\(.*\) $device"``expr "$devs" : ".* $device\(.*\)"`
  623.             done
  624.             exec 3<&-
  625.         fi
  626.         create="$create "`cvt $devs`
  627.         [ "$delete" != "" ] && $0 $opts -d $delete
  628.         [ "$create" != " " ] && $0 $opts $create
  629.         [ "$opt_n" ] && continue
  630.         for device in $devices
  631.         do
  632.             if [ "`cvt $device`" ]
  633.             then
  634.                 eval echo $device \$major_$device
  635.             fi
  636.         done > DEVICES
  637.         ;;
  638.     *)
  639.         echo "$0: don't know how to make device \"$arg\"" >&2
  640.         ;;
  641.     esac
  642. done
  643.  
  644. exit 0
  645.